package de.g18.gruppe3.dataio.service;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import de.g18.gruppe3.common.exception.SQLServiceException;
import de.g18.gruppe3.common.io.SQLExportService;
import de.g18.gruppe3.common.model.User;

/**
 * Mysql-Schnittstelle zum einfügen von Datensätzen in eine Datenbank.
 *
 * @author <a href="mailto:skopatz@gmx.net">Sebastian Kopatz</a>
 */
public class SQLExportServiceImpl implements SQLExportService{

	private Connection con = null;
	private ResultSet rs = null;

	/**
	 * Holt sich die Verbindung
	 */
	public Connection getCurrentConnection(){
		return this.con;
	}

	/**
	 * Holt sich sich das ResultSet einer SQL-Abfrage
	 */
	public ResultSet getCurrentresult(){
		return this.rs;
	}

	/**
	 * Setzt das ResultSet auf das übergeben ResultSet
	 */
	public ResultSet setCurrentresult(ResultSet rs){
		this.rs = rs;
		return this.rs;
	}

	/**
	 * Konfiguriert die Verbindung zur Mysql-Datenbank
	 */
	private Connection setCurrentConnection(String url, String user, String password) throws SQLException{
		try{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
		}catch (Exception ex){
			throw new IllegalStateException("Mysql-Treiber konnte nicht geladen werden", ex);
		}
		con = DriverManager.getConnection("jdbc:mysql://"+url, user, password);
		return con;
	}

	/**
	 * 
	 * @param url Host-Addresse für den Mysql-Server
	 * @param user BenutzerName
	 * @param password BenutzerPasswort
	 * @param aUser
	 * @return liefert 1 zurück wenn die Verbindung fehlschlägt und 0 wenn alles durchläuft
	 * @throws SQLServiceException 
	 */
	public int writeData(String url, String user, String password, User aUser) throws SQLServiceException {
	    try {
	        rs = null;
	        setCurrentConnection(url, user, password);
	        con = getCurrentConnection();
	        Statement stmt;
	        stmt = con.createStatement();
	        stmt.executeUpdate("USE junkDB");
	        //note for my self: set id to autoincrement
	        System.out.println(aUser.getOU());
	        
	        return stmt.executeUpdate(
	                "INSERT INTO person(name, vorname, passwort, " +
	                        "user, klasse) VALUES('"
	                        + aUser.getNachname() + "','"
	                        + aUser.getVorname() + "','"
	                        + aUser.getPasswort() + "','"
	                        + aUser.getLogin() + "','"
	                        + aUser.getOU().getName() +
	                "')");
	    } catch (Exception e) {
	        throw new SQLServiceException("Benutzer konnte nicht hinzugefügt werden!", e);
	    } finally {
	    	try {
				if (con != null) {
					con.close();
				}
			} catch (SQLException e) {
				throw new SQLServiceException("SQLContext konnte nicht geschloßen werden!", e);
			}
	    }
	}

	/**
	 * Initialisiert das einfügen von Datensätzen in die MYsql-Datenbank
	 */
	@Override
	public int exportUserSQL(String url, String user, String password,
	                         User aUser) throws SQLServiceException {
	    return writeData(url,user,password,aUser) == 0 ? 1 : 0;
	}

}
